Skip to main content

Pesquisa Técnica — Remove Recommended Item

Contexto

Refinamento da task #193232 — endpoint DELETE api/payment/v2/{id}/remove-recommended-item.


Código relevante encontrado

CartController — ausência de remove item

Path: coezzion-service-cart/src/Cart.API/Controllers/CartController.cs

Não existe endpoint de remoção de item individual. O único DELETE existente é DELETE api/cart que remove o cart inteiro via DeleteCartCommand { int Id } (lines 270–288).

CartItemsModel — campos

Path: coezzion-db-core/src/Core.OrgDB/Entities/CartItemsModel.cs

CampoTipoObservação
IdintPK — identificador único do CartItem
CartIdintFK para CartModel
ProductIdint
Sizestring
UnitPricedecimal
DiscountDiscountTypeEnum: None/Percentage/Value
DiscountValuedecimal
FullPricedecimal
DiscountOriginCartItemDiscountOriginEnum: None/Markdown/Manual/Both
GrossPricedecimal
Totaldecimal
HasEmployeeDiscountboolúnico bool existente

Não existe campo IsFromRecommendation ou similar. A ser adicionado em US separada.

CartModel — métodos de remoção

Path: coezzion-db-core/src/Core.OrgDB/Entities/CartModel.cs

Não existe método RemoveItem. Métodos relacionados:

  • UpdateItems (lines 226–237): remove todos os itens e adiciona nova lista — bulk replace
  • Delete (lines 241–249): soft-delete em cascata do cart inteiro
  • CalculateTotal (lines 207–224): recalcula ItemsTotal, PdvIntegrationValue, Total

Novo método RemoveItem(int cartItemId) precisará ser criado na Cart API.

Product DTO — ausência de cartItemId

Path: coezzion-service-checkout/src/Checkout.Domain/DTO/GetInfo/GetInfoBase.cs (lines 327–360)

O record Product possui: Name, Size, Amount, FullPrice, Price, Total, Url.

cartItemId não está exposto. O Id existe em CartItemsInfoDTO (line 32, populado da query SQL CI."Id") mas é descartado no mapeamento para Product. Será exposto conforme ADR-008.

CartItemsInfoDTO

Path: coezzion-service-checkout/src/Checkout.Domain/DTO/GetInfo/CartInfoDTO.cs (lines 30–41)

Campos: Id, ProductName, UrlThumbnail, GrossPrice, Size, Quantity, UnitPrice, Total, Sku.

O campo Id já é selecionado pela query SQL (CI."Id" Id) e está disponível para exposição no Product DTO sem alteração de query.

PaymentsModel.Total

Path: coezzion-db-link/src/Link.OrgDB/Entities/PaymentsModel.cs (line 25)

Total é decimal, setado na criação do payment com cart.Total. Sem método UpdateTotal — atualização feita diretamente via setter no handler (mesmo padrão do add, conforme ADR-007).


Decisões tomadas durante o refinamento

#QuestãoDecisão
1Flag IsFromRecommendationSerá adicionada em US separada (dependência)
2Identificador do item no requestcartItemId (body) — zzlink usa o ID retornado no Product DTO
3cartItemId no Product DTOExposto como campo novo aditivo — ver ADR-008
4Autenticação checkout[Authorize(AuthenticationSchemes = "PaymentsScheme")] — mesmo do add
5Rota checkoutDELETE api/payment/v2/{id}/remove-recommended-item
6Retorno 200Mesmo shape do add — values, products, paymentMethods, recommendedItems
7Rota Cart APIDELETE api/cart/{cartId}/items/{cartItemId} — sem body, [UseApiKey("internal")]
8Ajuste Payment.TotalSíncrono no handler — mesmo padrão do add (ADR-007)
9Validação janela de validadeNão se aplica ao remove — item já está no cart
10Separação em tasksDuas tasks: checkout (task-04) e Cart API (task-05)

Nova task identificada

Task 05 — Cart API: Remove Item de cart existente